//////////////////////////////////////////////////////////////////////////////////////////////////////
// 项目名   : Constexpr
// 文件名   : Constexpr.h
// 作者     : Aiye
// 日期     : 2025/8/16 15:01
// 邮箱     : 2878548868@qq.com
// 摘要     : 介绍constexpr的用法
//////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef LAMBDA_CONSTEXPR_H
#define LAMBDA_CONSTEXPR_H

namespace constants
{
    // 可以去除static，命名空间默认就具有内部连接性
    inline constexpr static const char* VERSION = "1.0.0";
}

class Constexpr
{
public:
    Constexpr()
    {
        constexpr int c_nVar{100}; // 修饰常量
    }

    // 修饰构造函数
    constexpr Constexpr(int nValue) noexcept
        :_nValue(nValue)
    {
        // 函数体为空，并且必须采用初始化列表的方式为各个成员赋值
    }

    // 常量成员函数，个人觉得这个没有必要
    constexpr int getValue() const noexcept
    {
        return _nValue;
    }


private:
    int _nValue{0};
};

// 修饰模板函数
constexpr auto abs(auto value) noexcept -> decltype(value)
{
    return (value < 0) ? -value : value;
} // 如果是写在cpp文件中则需要明确指出类型

#endif //LAMBDA_CONSTEXPR_H